package city.spring.modules.medicine.service.impl;

import city.spring.modules.medicine.entity.MedicineshelflevelEntity;
import city.spring.modules.medicine.repository.MedicineshelflevelRepository;
import city.spring.modules.medicine.service.MedicineshelflevelService;
import city.spring.utils.MyBatisUtils;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.cache.annotation.CacheConfig;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

/**
 * Service：货架表
 *
 * @author 谢金婷
 * @date 2020-06-14 16:27:53
 */
@CacheConfig(cacheNames = {MedicineshelflevelServiceImpl.CACHE_NAME})
@Transactional(rollbackFor = Throwable.class)
@Service
public class MedicineshelflevelServiceImpl extends ServiceImpl<MedicineshelflevelRepository, MedicineshelflevelEntity> implements MedicineshelflevelService {

    private final MedicineshelflevelRepository shelflevelRepository;

    public MedicineshelflevelServiceImpl(MedicineshelflevelRepository shelflevelRepository) {
        this.shelflevelRepository = shelflevelRepository;
    }

    @Override
    public void saveShelflevel(MedicineshelflevelEntity entity) {
        //保存前判断该仓库是否有该shelfcode
//        MedicineshelflevelEntity shelfEntity = shelfRepository.getById(entity.getId());
//        System.out.println(shelfEntity);
//        List<MedicineshelflevelEntity> shelfEntities = shelfRepository.shelfSidAndCode(String.valueOf(entity.getStorehouseId()), entity.getShelfcode());
//        System.out.println("11" + shelfEntities);
//        //如果数组为空，新增货架，否则提示已存在该货架
//        if (shelfEntities == null || shelfEntities.size() == 0) {
//            save(entity);
//        } else {
//            throw new RuntimeException("该仓库已存在该货架编号。" + "保存信息失败");
//        }

        if (!save(entity)) {
            throw new RuntimeException("保存信息失败");
        }
    }

    @Override
    public void updateShelflevel(MedicineshelflevelEntity entity) {
        // 使用 updateById(entity); 修改数据时，将会修改 entity 对象中所有非null数据，如果某个字段为null，将会忽略该字段的修改
        boolean update = updateById(entity);
        if (!update) {
            throw new RuntimeException("修改信息失败");
        }
    }

    @Override
    public void deleteShelflevel(String primaryKey) {
//        MedicineshelflevelEntity shelfEntity = shelflevelRepository.getById(primaryKey);
//        //根据货架编号获取物资信息 判断库存量
//        List<MaterialSettingEntity> materialSettingEntities = materialSettingService.materialByShelfId(shelfEntity.getId());
//
//        //如果数组为空，删除货架，否则提示不允许删除
//        if (materialSettingEntities == null || materialSettingEntities.size() == 0) {
//            removeById(primaryKey);
////           System.out.println("-00909====");
//        } else {
//            throw new RuntimeException("货架尚有物资库存，请在清空库存后删除。");
//        }
        removeById(primaryKey);
    }

    @Override
    public void deleteShelflevel(List<String> primaryKeys) {
        removeByIds(primaryKeys);
    }

    @Override
    public MedicineshelflevelEntity getById(String id) {
        return shelflevelRepository.getById(id);
    }

    @Override
    public IPage<MedicineshelflevelEntity> getShelflevelByMtid(Pageable pageable, String materialId) {
        IPage<MedicineshelflevelEntity> page = MyBatisUtils.toPage(pageable);
        return shelflevelRepository.getShelflevelByMtid(page, lambdaQuery().getWrapper(), materialId);
    }

    @Override
    public IPage<MedicineshelflevelEntity> getShelflevelByShelfId(Pageable pageable, String shelfId) {
        IPage<MedicineshelflevelEntity> page = MyBatisUtils.toPage(pageable);
        return shelflevelRepository.getShelflevelByShelfId(page, lambdaQuery().getWrapper(), shelfId);
    }

}